Problem
【ZJOI2007】棋盘制作
Description
国际象棋是世界上最古老的博弈游戏之一,和中国的围棋、象棋以及日本的将棋同享盛名。据说国际象棋起源于易经的思想,棋盘是一个大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳。而我们的主人公,正是国际象棋的狂热爱好者。作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友决定将棋盘扩大以适应他们的新规则。
找到了一张由个正方形的格子组成的矩形纸片,每个格子被涂有黑白两种颜色之一。想在这种纸中裁减一部分作为新棋盘,当然,他希望这个棋盘尽可能的大。不过还没有决定是找一个正方形的棋盘还是一个矩形的棋盘(当然,不管哪种,棋盘必须都黑白相间,即相邻的格子不同色),所以他希望可以找到最大的正方形棋盘面积和最大的矩形棋盘面积,从而决定哪个更好一些。于是找到了即将参加全国信息学竞赛的你,你能帮助他么?
Input
第一行包含两个整数和,分别表示矩形纸片的长和宽。
接下来的行包含一个的矩阵,表示这张矩形纸片的颜色(表示白色,表示黑色)。
Output
包含两行,每行包含一个整数。
第一行为可以找到的最大正方形棋盘的面积;
第二行为可以找到的最大矩形棋盘的面积。
Sample Input
1 | 3 3 |
Sample Output
1 | 4 |
HINT
标签:悬线法DP
Solution
经典悬线法。
用表示从向左/右以交错的形式最远能延长到的位置,显然这两个数组可以预处理。
对于位置,用表示从向上走,最多以交错的形式走多远,显然也是可以预处理的。而由这个值可知呈交错的形式,若以其为棋盘的高,则宽为
那么在预处理的同时,我们对可以连在一起的横行求的最小值和的最大值,即若,则
最后枚举每个位置,求以其所在纵行为起点向左右扩展的最大矩形即可得到答案。
对于最大正方形,易知其由宽与高的最小值最大的矩形裁截而来,于是对每个极大矩形求其包含的最大正方形并取最大值即可。
Code
1 |
|